package model

import (
	"github.com/gogf/gf/v2/os/gtime"
)

type ProductReq struct {
	Name string `json:"name"`
	BaseReq
}

type ProductCreateReq struct {
	Key               string `json:"key"                                  description:"产品标识"`
	Name              string `json:"name"                                 description:"产品名称"`
	MessageProtocol   string `json:"messageProtocol"                      description:"消息协议"`
	TransportProtocol string `json:"transportProtocol"                   description:"传输协议: MQTT,COAP,UDP"`
	ProtocolId        uint   `json:"protocolId"                           description:"协议id"`
	DeviceType        string `json:"deviceType"                           description:"设备类型: 网关，设备，子设备"`
	Desc              string `json:"desc"                                 description:"描述"`
	Icon              string `json:"icon"                                 description:"图片地址"`
	MetadataTable     int    `json:"metadataTable"                        description:"是否生成物模型表：0=否，1=是"`
	Policy            string `json:"policy"                               description:"采集策略"`
	Status            int    `json:"status"                               description:"发布状态：0=未发布，1=已发布"`
	AuthType          int    `json:"authType"                             description:"认证方式（1=Basic，2=AccessToken，3=证书）"`
	AuthUser          string `json:"authUser"                             description:"认证用户"`
	AuthPasswd        string `json:"authPasswd"                           description:"认证密码"`
	AccessToken       string `json:"accessToken"                          description:"AccessToken"`
}

type ProductUpdateReq struct {
	Id                uint64 `json:"id"                                   description:""`
	Key               string `json:"key"                                  description:"产品标识"`
	Name              string `json:"name"                                 description:"产品名称"`
	MessageProtocol   string `json:"messageProtocol"                      description:"消息协议"`
	TransportProtocol string `json:"transportProtocol"                   description:"传输协议: MQTT,COAP,UDP"`
	ProtocolId        uint   `json:"protocolId"                           description:"协议id"`
	DeviceType        string `json:"deviceType"                           description:"设备类型: 网关，设备，子设备"`
	Desc              string `json:"desc"                                 description:"描述"`
	Icon              string `json:"icon"                                 description:"图片地址"`
	Metadata          string `json:"metadata"                             description:"物模型"`
	MetadataTable     int    `json:"metadataTable"                        description:"是否生成物模型表：0=否，1=是"`
	Policy            string `json:"policy"                               description:"采集策略"`
	Status            int    `json:"status"                               description:"发布状态：0=未发布，1=已发布"`
	AuthType          int    `json:"authType"                             description:"认证方式（1=Basic，2=AccessToken，3=证书）"`
	AuthUser          string `json:"authUser"                             description:"认证用户"`
	AuthPasswd        string `json:"authPasswd"                           description:"认证密码"`
	AccessToken       string `json:"accessToken"                          description:"AccessToken"`
}

type ProductDeleteReq struct {
	Id uint64 `json:"id"                                   description:""`
}

type ProductAddMetadataReq struct {
	ProductId  int64           `json:"productId"                           description:"产品id"`
	Type       string          `json:"type"                                  description:"物模型类型 属性，事件，服务"`
	Properties ProductMetadata `json:"properties"                            description:"属性物模型"`
	Events     ProductMetadata `json:"events"                            description:"事件物模型"`
	Services   ProductMetadata `json:"services"                            description:"服务物模型"`
}

type ProductMetadata struct {
	Identifier string `json:"identifier"                            description:"标识符"`
	Name       string `json:"name"                                 description:"名称"`
	DataType   string `json:"dataType"                            description:"数据类型"`
	AccessMode string `json:"accessMode"                            description:"访问模式"`
	Unit       string `json:"unit"                                description:"单位"`
	UnitName   string `json:"unitName"                                description:"单位名称"`
}

type ProductRes struct {
	Id                uint64      `json:"id"                                   description:""`
	Key               string      `json:"key"                                  description:"产品标识"`
	Name              string      `json:"name"                                 description:"产品名称"`
	MessageProtocol   string      `json:"messageProtocol"                      description:"消息协议"`
	TransportProtocol string      `json:"transportProtocol"                   description:"传输协议: MQTT,COAP,UDP"`
	ProtocolId        uint        `json:"protocolId"                           description:"协议id"`
	DeviceType        string      `json:"deviceType"                           description:"设备类型: 网关，设备，子设备"`
	Desc              string      `json:"desc"                                 description:"描述"`
	Icon              string      `json:"icon"                                 description:"图片地址"`
	Metadata          string      `json:"metadata"                             description:"物模型"`
	MetadataTable     int         `json:"metadataTable"                        description:"是否生成物模型表：0=否，1=是"`
	Policy            string      `json:"policy"                               description:"采集策略"`
	Status            int         `json:"status"                               description:"发布状态：0=未发布，1=已发布"`
	AuthType          int         `json:"authType"                             description:"认证方式（1=Basic，2=AccessToken，3=证书）"`
	AuthUser          string      `json:"authUser"                             description:"认证用户"`
	AuthPasswd        string      `json:"authPasswd"                           description:"认证密码"`
	AccessToken       string      `json:"accessToken"                          description:"AccessToken"`
	CertificateId     int         `json:"certificateId"                        description:"证书ID"`
	ScriptInfo        string      `json:"scriptInfo"                           description:"脚本信息"`
	CreatedBy         int         `json:"createdBy"                            description:"创建者"`
	UpdatedBy         int         `json:"updatedBy"                            description:"更新者"`
	DeletedBy         int         `json:"deletedBy"                            description:"删除者"`
	CreatedAt         *gtime.Time `json:"createdAt"                            description:"创建时间"`
	UpdatedAt         *gtime.Time `json:"updatedAt"                            description:"更新时间"`
	DeletedAt         *gtime.Time `json:"deletedAt"                            description:"删除时间"`
}

type ProductMetadataModel struct {
	Properties []ProductMetadata `json:"properties"                            description:"属性物模型"`
	Events     []ProductMetadata `json:"events"                            description:"事件物模型"`
	Services   []ProductMetadata `json:"services"                            description:"服务物模型"`
}

type ReleasedProductReq struct {
	ProductId int64 `json:"productId"                           description:"产品id"`
}
